﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.KDT.SXXK;
using Janus.Windows.GridEX;
using Janus.Windows.UI.CommandBars;
using InheritableBoolean=Janus.Windows.UI.InheritableBoolean;
using Company.BLL.KDT;

namespace Company.Interface.KDT.SXXK
{
    public partial class NguyenPhuLieuManageForm : BaseForm
    {
        /// <summary>
        /// Dùng cho kết quả tìm kiếm.
        /// </summary>
        private NguyenPhuLieuDangKyCollection nplDangKyCollection = new NguyenPhuLieuDangKyCollection();
        
        /// <summary>
        /// Thông tin nguyên phụ liệu đang dược chọn.
        /// </summary>
        private readonly NguyenPhuLieuDangKy currentNPLDangKy = new NguyenPhuLieuDangKy();
        

        public NguyenPhuLieuManageForm()
        {
            InitializeComponent();
        }

        //-----------------------------------------------------------------------------------------
        private void NguyenPhuLieuManageForm_Load(object sender, EventArgs e)
        {
            try
            {                
                this.Cursor = Cursors.WaitCursor;
                ctrDonViHaiQuan.Ma = GlobalSettings.MA_HAI_QUAN;
                
                cbStatus.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void btnSearch_Click(object sender, EventArgs e)
        {            
            this.search();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Tìm kiếm dữ liệu.
        /// </summary>
        private void search()
        {
            // Xây dựng điều kiện tìm kiếm.
            string where = "1 = 1";
            where += string.Format(" AND MaHaiQuan = '{0}'", ctrDonViHaiQuan.Ma);

            if (txtSoTiepNhan.TextLength > 0)
            {
                where += " AND SoTiepNhan = " + txtSoTiepNhan.Value;
            }

            if (Convert.ToInt32(cbStatus.SelectedValue) != TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                if (txtNamTiepNhan.TextLength > 0)
                {
                    where += " AND YEAR(NgayTiepNhan) = " + txtNamTiepNhan.Value;
                }
            }

            where += " AND TrangThaiXuLy = " + cbStatus.SelectedValue;
            
            // Thực hiện tìm kiếm.            
            this.nplDangKyCollection = NguyenPhuLieuDangKy.SelectCollectionDynamic(where, "");
            dgList.DataSource = this.nplDangKyCollection;
            
            this.setCommandStatus();

            this.currentNPLDangKy.TrangThaiXuLy = Convert.ToInt32(cbStatus.SelectedValue);
        }

        //-----------------------------------------------------------------------------------------

        private void setCommandStatus()
        {
            dgList.AllowDelete = Janus.Windows.GridEX.InheritableBoolean.True;
            if (Convert.ToInt32(cbStatus.SelectedValue) == TrangThaiXuLy.CHO_DUYET)
            {
                dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                cmdSend.Enabled = InheritableBoolean.False;
                cmdSingleDownload.Enabled = InheritableBoolean.True;
                cmdCancel.Enabled = InheritableBoolean.True;
            }
            else if (Convert.ToInt32(cbStatus.SelectedValue) == TrangThaiXuLy.DA_DUYET)
            {
                dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                cmdSend.Enabled = InheritableBoolean.False;
                cmdSingleDownload.Enabled = InheritableBoolean.False;
                cmdCancel.Enabled = InheritableBoolean.False;
                dgList.AllowDelete = Janus.Windows.GridEX.InheritableBoolean.False;
            }
            else if (Convert.ToInt32(cbStatus.SelectedValue) == TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                dgList.RootTable.Columns["SoTiepNhan"].Visible = false;
                dgList.RootTable.Columns["NgayTiepNhan"].Visible = false;
                cmdSend.Enabled = InheritableBoolean.True;
                cmdSingleDownload.Enabled = InheritableBoolean.False;
                cmdCancel.Enabled = InheritableBoolean.False;
            }
            else if (Convert.ToInt32(cbStatus.SelectedValue) == TrangThaiXuLy.KHONG_PHE_DUYET)
            {
                dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                cmdSend.Enabled = InheritableBoolean.True;
                cmdSingleDownload.Enabled = InheritableBoolean.False;
                cmdCancel.Enabled = InheritableBoolean.True;
            }
        }


        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                e.Row.Cells["TenHaiQuan"].Text = this.DonViHaiQuan_GetName(e.Row.Cells["MaHaiQuan"].Value.ToString().Trim());
                switch (Convert.ToInt32(e.Row.Cells["TrangThaiXuLy"].Value))
                {
                    case -1:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Chưa khai báo";
                        break;
                    case 0:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Chờ duyệt";
                        break;
                    case 1:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Đã duyệt";
                        break;
                    case 2:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Không phê duyệt";
                        break;
                }
            }
        }

        //-----------------------------------------------------------------------------------------

        private void download()
        {
            NguyenPhuLieuDangKy nplDK = new NguyenPhuLieuDangKy();
            try
            {                
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    if (i.RowType == RowType.Record)
                    {
                        nplDK = (NguyenPhuLieuDangKy) i.GetRow().DataRow;
                        
                        int ttxl = nplDK.TrangThaiXuLy;

                        WSForm wsForm = new WSForm();
                        wsForm.ShowDialog(this);
                        if (!wsForm.IsReady) return;
                        this.Cursor = Cursors.WaitCursor;
                        nplDK.WSRequestStatus();
                        this.Cursor = Cursors.Default;
                        if (nplDK.TrangThaiXuLy==TrangThaiXuLy.DA_DUYET)
                        {
                            ShowMessage("Nhận dữ liệu thành công! \nTrạng thái chứng từ đã thay đổi: Đã duyệt chính thức.", false);
                            this.search();
                        }
                        else if (nplDK.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET)
                        {
                            ShowMessage("Nhận dữ liệu thành công!", false);
                            dgList.Refetch();
                        }
                        else if (nplDK.TrangThaiXuLy == TrangThaiXuLy.KHONG_PHE_DUYET)
                        {
                            ShowMessage("Nhận dữ liệu thành công! \nTrạng thái chứng từ đã thay đổi: Hải quan không duyệt chính thức.", false);
                            this.search();                            
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                if (ShowMessage("Nhận dữ liệu không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = nplDK.ID;
                    hd.LoaiToKhai = LoaiToKhai.DANH_MUC_NGUYEN_PHU_LIEU;
                    hd.TrangThai = nplDK.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.NHAN_THONG_TIN;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void cmMain_CommandClick(object sender, CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "cmdSingleDownload":
                    this.download();
                    break;
                case "cmdCancel":
                    this.cancel();
                    break;
                case "cmdSend":
                    this.send();
                    break;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                NguyenPhuLieuDangKyDetailForm f = new NguyenPhuLieuDangKyDetailForm();
                f.NPLDangKy = (NguyenPhuLieuDangKy) e.Row.DataRow;
                // int ttxl = f.NPLDangKy.TrangThaiXuLy;
                if (f.NPLDangKy.TrangThaiXuLy == TrangThaiXuLy.CHUA_KHAI_BAO || f.NPLDangKy.TrangThaiXuLy == TrangThaiXuLy.KHONG_PHE_DUYET)
                {
                    f.OpenType = OpenFormType.Edit;
                }
                else
                {
                    f.OpenType = OpenFormType.View;
                }
                f.ShowDialog(this);
                // if (ttxl != f.NPLDangKy.TrangThaiXuLy) this.search();
            }
        }

        /// <summary>
        /// Hủy thông tin đã đăng ký.
        /// </summary>
        private void cancel()
        {
            NguyenPhuLieuDangKy nplDangKy = new NguyenPhuLieuDangKy();
            try
            {
               
                if (dgList.GetRow() != null)
                {
                    nplDangKy = (NguyenPhuLieuDangKy)dgList.GetRow().DataRow;
                    if (nplDangKy.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET || nplDangKy.TrangThaiXuLy == TrangThaiXuLy.KHONG_PHE_DUYET)
                    {
                        
                        WSForm wsForm = new WSForm();
                        wsForm.ShowDialog(this);
                        if (!wsForm.IsReady) return;
                        this.Cursor = Cursors.WaitCursor;
                        bool result = nplDangKy.WSCancel();
                        this.Cursor = Cursors.Default;
                        if (result)
                        {
                            ShowMessage("Hủy thông tin đã đăng ký thành công!", false);
                            this.search();
                        }
                        else
                        {
                            ShowMessage("Hủy thông tin đã đăng ký không thành công!", false);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message.IndexOf("123DaDuyet321") >= 0)
                {
                    ShowMessage("Danh sách này đã duyệt rồi ", false);
                    return;
                }
                if (ShowMessage("Hủy khai báo không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = nplDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DANH_MUC_NGUYEN_PHU_LIEU;
                    hd.TrangThai = nplDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.HUY_KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {
            NguyenPhuLieuDangKy nplDangKy = new NguyenPhuLieuDangKy();
            try
            {
               
                if (dgList.GetRow() != null)
                {
                    nplDangKy = (NguyenPhuLieuDangKy) dgList.GetRow().DataRow;
                    nplDangKy.LoadNPLCollection();
                    if (nplDangKy.NPLCollection.Count == 0)
                    {
                        ShowMessage("Danh sách nguyên phụ liệu rỗng.\nKhông thể thực hiện khai báo thông tin đến Hải quan.", false);
                        this.Cursor = Cursors.Default;
                        return;
                    }

                    string[] danhsachDaDangKy = new string[0];

                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    this.Cursor = Cursors.WaitCursor;
                    nplDangKy.WSSend(ref danhsachDaDangKy);
                    this.Cursor = Cursors.Default;
                    // Thực hiện kiểm tra.
                    if (nplDangKy.SoTiepNhan == 0)
                    {
                        //this.updateRowsOnGrid(danhsachDaDangKy);
                        ShowMessage("Đăng ký không thành công!\nDo có các nguyên phụ liệu đã được đăng ký rồi.\nVui lòng kiểm tra lại các dòng màu đỏ!", false);
                    }
                    else
                    {
                        ShowMessage("Đăng ký thành công!\nSố tiếp nhận đăng ký điện tử: " + nplDangKy.SoTiepNhan, false);
                        //cmdAdd.Enabled = cmdSend.Enabled = InheritableBoolean.False;
                    }
                    this.search();
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message.IndexOf("123DaDuyet321") >= 0)
                {
                    ShowMessage("Danh sách này đã duyệt rồi ", false);
                    return;
                }
                if (ShowMessage("Khai báo không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = nplDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DANH_MUC_NGUYEN_PHU_LIEU;
                    hd.TrangThai = nplDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void cbStatus_SelectedValueChanged(object sender, EventArgs e)
        {            
            if (Convert.ToInt32(cbStatus.SelectedValue) == TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                txtNamTiepNhan.Text = string.Empty;
                txtNamTiepNhan.Value = 0;
                txtNamTiepNhan.Enabled = false;
                txtSoTiepNhan.Value = 0;
                txtSoTiepNhan.Text = string.Empty;
                txtSoTiepNhan.Enabled = false;
            }
            else 
            {
                
                txtNamTiepNhan.Value = DateTime.Today.Year;
                txtNamTiepNhan.Enabled = true;
                txtSoTiepNhan.Enabled = true;
            }
        
        }

        private void NguyenPhuLieuManageForm_Shown(object sender, EventArgs e)
        {
            this.search();
        }

        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            

        }

        private void dgList_DeletingRecord(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                if (ShowMessage("Bạn có muốn xóa danh sách nguyên phụ liệu này không?", true) == "Yes")
                {
                    this.Cursor = Cursors.WaitCursor;
                    GridEXSelectedItemCollection items = dgList.SelectedItems;
                    foreach (GridEXSelectedItem i in items)
                    {
                        if (i.RowType == RowType.Record)
                        {
                            NguyenPhuLieuDangKy nplDangKySelected = (NguyenPhuLieuDangKy)i.GetRow().DataRow;
                            if (nplDangKySelected.ID > 0)
                            {
                                nplDangKySelected.Delete();
                            }
                        }
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
            catch (Exception ex)
            {
                ShowMessage(ex.Message, false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------
    }
}